package com.zlsy.thread.threadpool.blockingqueue;

import java.util.Collection;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.TimeUnit;

/**
 * @author zhouliang
 * @date 2020/7/6 20:30
 */
public abstract class BlockingQueueLearing<E> implements BlockingQueue<E> {

    /**
     * 将给定的元素设置到队列里面，如果设置成功则返回true，如果设置失败则抛出异常。
     * 如果往限定了长度的队列中设置值，推荐使用offer(E e)方法。
     */
    @Override
    public boolean add(E e) {
        return false;
    }

    /**
     * 将给定的元素设置到队列中，如果设置成功返回true，否则返回false，
     * e的值不能为空，否则抛出空指针异常。
     */
    @Override
    public boolean offer(E e) {
        return false;
    }

    /**
     * 将元素设置到队列中，如果队列中没有多余的空间，该方法会一直阻塞，
     * 直到队列中有多余的空间。
     */
    @Override
    public void put(E e) throws InterruptedException {

    }

    /**
     * 将给定的元素在给定的时间内设置到队列中去，如果设置成功返回true，否则返回false。
     */
    @Override
    public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException {
        return false;
    }

    /**
     * 从队列中获取值，如果队列里面没有值，线程会一直阻塞，直到队列中有值
     * 并且该方法取得了该值。
     */
    @Override
    public E take() throws InterruptedException {
        return null;
    }

    /**
     * 在给定的时间里面，从队列中获取值，如果没有取到会抛出异常
     */
    @Override
    public E poll(long timeout, TimeUnit unit) throws InterruptedException {
        return null;
    }

    /**
     * 获取队列中剩余的空间
     */
    @Override
    public int remainingCapacity() {
        return 0;
    }

    /**
     * 从队列里面移除指定的值
     */
    @Override
    public boolean remove(Object o) {
        return false;
    }

    /**
     * 判断队列中是否拥有该值
     */
    @Override
    public boolean contains(Object o) {
        return false;
    }

    /**
     * 将队列中的值，全部移除，并且设置到给定的集合中
     */
    @Override
    public int drainTo(Collection<? super E> c) {
        return 0;
    }

    /**
     * 指定最多数量限制将队列中值，全部移除，并发设置到给定的集合中
     */
    @Override
    public int drainTo(Collection<? super E> c, int maxElements) {
        return 0;
    }
}
